const app = getApp() // 获取应用实例
import { getOpenid, postPayInfo, postPayDemo } from '../http/api' // 导入http api

// 支付流程:微信登录获取code，根据code获取openid，根据openid/户号/金额等信息获取微信支付信息，调起微信支付，接收支付回调。
export async function openWxPay(type, amount_total, number, ids) {
	// 演示模式 演示支付
	if (app.globalData.gl.DEMO_MODE) {
		// 必传参数: openid:小程序openid
		// 物业类型: type:0 物业 1 水 2 电
		// ids:账单id,用英文逗号拼接
		// 充值金额: amount_total
		// number:户号
		let { code, msg, data } = await postPayDemo({ token: app.globalData.gl.token, openid: '', type, amount_total, number, ids, payment_type: 'wxpay' })
		uni.showModal({ title: '提示', content: msg, showCancel: false })
		return
	}
	// #ifdef MP-WEIXIN
	uni.showLoading({ title: '获取支付信息', mask: true })
	// 微信登录获取code
	uni.login({
		async success(res) {
			if (res.code) {
				// 根据登录code 换取openid
				let { code, msg, data } = await getOpenid({ code: res.code })
				// console.log(`getOpenid...code=${code},msg=${msg},data=`, data)
				if (code == '1' && data.openid) {
					// 根据openid获取支付信息
					// reqPayInfo(data.openid, type, amount_total, number, ids) // 建行支付
					reqWXPayInfo(data.openid, type, amount_total, number, ids) // 微信支付
				} else {
					uni.showToast({ title: msg, icon: 'error' })
				}
			} else {
				uni.hideLoading();
				uni.showToast({ title: '微信code错误', icon: 'error' })
				console.log('微信code错误...', res.errMsg)
			}
		},
		fail(res) {
			uni.hideLoading();
			uni.showToast({ title: '微信code获取失败', icon: 'error' })
			console.log('微信code获取失败...', res)
		}
	})
	// #endif

	// #ifdef WEB
	uni.showToast({ title: 'web端不能支付', icon: 'none' })
	// #endif
}

// 请求建行(微信)支付信息
export async function reqPayInfo(SUB_OPENID, type, amount_total, number, ids) {
	uni.showLoading({ title: '获取支付信息', mask: true })
	// 必传参数: SUB_OPENID:小程序openid
	// 物业类型: type:0 物业 1 水 2 电
	// ids:账单id,用英文逗号拼接
	// 充值金额: amount_total
	// number:户号
	let { code, msg, data } = await postPayInfo({
		token: app.globalData.gl.token,
		SUB_OPENID,
		type,
		amount_total,
		number,
		ids
	})
	if (code == '1' && data.ERRCODE == '000000') {
		uni.showLoading({ title: '等待支付结果..', mask: true })
		// 调起微信支付
		uni.requestPayment({
			timeStamp: data.timeStamp,
			nonceStr: data.nonceStr,
			package: data.package,
			signType: data.signType,
			paySign: data.paySign,
			// 用户支付成功
			success(res) {
				let msg = '支付成功！'
				if (type == 2) {
					msg = '支付成功！请于4小时后查看剩余电量'
				}
				uni.hideLoading();
				uni.showModal({
					title: '提示',
					content: msg,
					showCancel: false,
					success(res) {
						if (res.confirm) {
							// 点击确定
							uni.navigateBack() // 关闭当前页面
						}
					}
				});
			},

			fail(res) {
				uni.hideLoading();
				uni.showToast({ title: '支付失败', icon: 'none' })
			}
		});
	} else {
		uni.hideLoading();
		uni.showToast({ title: msg, icon: 'none' })
	}
}

// 请求微信支付信息
export async function reqWXPayInfo(openid, type, amount_total, number, ids) {
	uni.showLoading({ title: '获取支付信息', mask: true })
	// 必传参数: openid:小程序openid
	// 物业类型: type:0 物业 1 水 2 电
	// ids:账单id,用英文逗号拼接
	// 充值金额: amount_total
	// number:户号
	let { code, msg, data } = await postPayInfo({
		token: app.globalData.gl.token,
		openid,
		type,
		amount_total,
		number,
		ids,
		payment_type: 'wxpay'
	})
	if (code == '1') {
		uni.showLoading({ title: '等待支付结果..', mask: true })
		// 调起微信支付
		uni.requestPayment({
			timeStamp: data.timeStamp,
			nonceStr: data.nonceStr,
			package: data.package,
			signType: data.signType,
			paySign: data.paySign,
			// 用户支付成功
			success(res) {
				let msg = '支付成功！'
				if (type == 2) {
					msg = '支付成功！请稍后查看剩余电量'
				}
				uni.hideLoading();
				uni.showModal({
					title: '提示',
					content: msg,
					showCancel: false,
					success(res) {
						if (res.confirm) {
							uni.navigateBack() // 关闭当前页面
						}
					}
				})
			},

			fail(res) {
				uni.hideLoading()
				uni.showToast({ title: '支付失败', icon: 'none' })
			}
		});
	} else {
		uni.hideLoading();
		uni.showToast({ title: msg, icon: 'none' })
	}
}